/**
 * electron更新
 */
const { ipcMain } = require('electron')
const { autoUpdater } = require('electron-updater')

let mainWindow = null
exports.updateHandle = (window, feedUrl) => {
  mainWindow = window
  //设置更新包的地址
  autoUpdater.setFeedURL(feedUrl)
  //设置自动下载
  autoUpdater.autoDownload = false
  //监听升级失败事件
  autoUpdater.once('error', function (error) {
    sendUpdateMessage({
      cmd: 'error',
      message: error,
    })
  })
  //监听开始检测更新事件
  autoUpdater.once('checking-for-update', function (message) {
    sendUpdateMessage({
      cmd: 'checking-for-update',
      message: message,
    })
  })
  //监听发现可用更新事件
  autoUpdater.once('update-available', function (message) {
    sendUpdateMessage({
      cmd: 'update-available',
      message: message,
    })
  })
  //监听没有可用更新事件
  autoUpdater.once('update-not-available', function (message) {
    sendUpdateMessage({
      cmd: 'update-not-available',
      message: message,
    })
  })

  // 更新下载进度事件
  autoUpdater.on('download-progress', function (progressObj) {
    sendUpdateMessage({
      cmd: 'download-progress',
      message: progressObj,
    })
  })
  //监听下载完成事件
  autoUpdater.once(
    'update-downloaded',
    function (event, releaseNotes, releaseName, releaseDate, updateUrl) {
      sendUpdateMessage({
        cmd: 'update-downloaded',
        message: {
          releaseNotes,
          releaseName,
          releaseDate,
          updateUrl,
        },
      })
      //退出并安装更新包
      autoUpdater.quitAndInstall()
    },
  )

  //接收渲染进程消息，开始检查更新
  ipcMain.once('check-for-update', (e, arg) => {
    //执行自动更新检查
    // sendUpdateMessage({cmd:'checkForUpdate',message:arg})
    autoUpdater.checkForUpdates()
  })

  ipcMain.once('down-load-update', (e, arg) => {
    // 开始下载
    autoUpdater.downloadUpdate()
  })
  return autoUpdater
}
//给渲染进程发送消息
function sendUpdateMessage(text) {
  mainWindow.webContents.send('update-state', text)
}
